/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package administrador;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 *
 * @author daniel1.Silva
 */
public class ProcSubeFacturas extends Thread {

    //Parametros de Conexion Internet:
    int ProductosCargados;
    Conexion conexionLocal;
    PanelActualizacion panelAct;
    int bodega;

    public ProcSubeFacturas(Conexion conexion, PanelActualizacion panelAct, int bodega) {

        conexionLocal = conexion;
        this.panelAct = panelAct;
        this.bodega = bodega;

    }

    public void run() {
        boolean procesa = true;
        // while(procesa){
        //Realiza las Actualizaciones:

        //La bandera de productos cargados:

        //Tomando la base de datos de la computadora local y su base de datos se Actualizara la base del Internet
        String IPCliente = "174.136.152.21";// "174.136.152.21";
        String nombre = "sexyusuario";//"daniel1";
        String password = "yxes1984";
        String dbcliente = "sexylocuras";
        String puerto = "3306";


        //Realizo la conexion a la base de datos cliente:
        Conexion conexionWeb = new Conexion();
        if (!conexionWeb.conectarBase(nombre, password, puerto, dbcliente, IPCliente)) {
           //System.out.println("No pudo establecer la conexion primera");
            // JOptionPane.showMessageDialog(panelAct, "No se pudo establecer conexion con la base de datos del Internet !!", "Informacion", JOptionPane.WARNING_MESSAGE);

        } else {

            //Pregunto cuales son los ultimos documentos subidos.
            ResultSet compLoc = conexionWeb.consultarBase("SELECT * FROM temp_factsubidas where cod_bodega=" + bodega + ";");

            //Ultimos Numeros
            int ultNumPed = 0;
            int ultNumKFact = 0;
            int ultNumDev = 0;


            try {


                //Recorro todos los Comprobantes:
                compLoc.beforeFirst();
                while (compLoc.next()) {
                    String comprobante = compLoc.getString(2);
                    int valor = compLoc.getInt(3);

                    //Saco para el pedido:
                    if (comprobante.equals("fac")) {
                        //Saco el ultimo numero de facturacion emitida.
                        ultNumPed = valor;

                    }

                    //Saco para el kfactura
                    if (comprobante.equals("kfa")) {
                        //Saco el ultimo numero de facturacion emitida.
                        ultNumKFact = valor;

                    }

                    //Saco para el devoluciones en Compras
                    if (comprobante.equals("dev")) {
                        //Saco el ultimo numero de facturacion emitida.
                        ultNumDev = valor;

                    }




                }




            } catch (SQLException ex) {
                Logger.getLogger(ProcSubeFacturas.class.getName()).log(Level.SEVERE, null, ex);
            }


            //Realizo la subida de Informacion Pedidos y Kardex al Servidor:(Solo de los que faltan)
           //System.out.println("**** Termina Cargar los Numeros Ultimos Documentos");
            suboClientes(conexionWeb);
           //System.out.println("**** Termina Clientes");
            suboSeparados(conexionWeb);
           //System.out.println("**** Termina Separados");
            suboDtlSeparados(conexionWeb);
           //System.out.println("**** Termina DTlSeparados");
            suboPgSeparados(conexionWeb);
           //System.out.println("**** Termina PgSeparados");


            suboFacturas(ultNumPed, conexionWeb);
           //System.out.println("**** Termina Facturas");
            subodtlFacturas(ultNumPed, conexionWeb);
           //System.out.println("**** Termina DtlFacturas");
            suboKFacturas(ultNumKFact, conexionWeb, "E");
           //System.out.println("**** Termina KFacturasE");
            subodtlKFacturas(ultNumKFact, conexionWeb, "E");
           //System.out.println("**** Termina DtlKFacturasE");
            suboKFacturas(ultNumDev, conexionWeb, "S");
           //System.out.println("**** Termina KFacturasS");
            subodtlKFacturas(ultNumDev, conexionWeb, "S");
           //System.out.println("**** Termina DtlKFacturasS");
            //Falta guardar las ultimas facturas subidas.
            //Cierro la Conexion Web Abierta    
            try {
                conexionWeb.cerrarConexion();
            } catch (Exception ex) {
                Logger.getLogger(ProcSubeFacturas.class.getName()).log(Level.SEVERE, null, ex);
            }

            //Cierro la Ventana de Actualizacion
            panelAct.dispose();


        }


    }

    private void suboSeparados(Conexion conexionWeb) {
        //Saco el ultimo los Clientes de la Base Web
        ResultSet res = conexionWeb.consultarBase("SELECT ultnumero FROM temp_factsubidas where cod_bodega=" + bodega + " and tipoDoc like 'sep';");

        int ultSep = 0;
        try {
            res.beforeFirst();
            res.next();
            ultSep = res.getInt(1);
        } catch (SQLException ex) {
            Logger.getLogger(ProcSubeFacturas.class.getName()).log(Level.SEVERE, null, ex);
        }

        //Saco los clientes que no han sido creados: 
        res = conexionLocal.consultarBase("SELECT * FROM separado s where codigo>=" + ultSep + ";");
        this.panelAct.jLabel1.setText("Actualizo Separados");
        conexionWeb.consultarBase("START TRANSACTION;");
        int totalSeparaciones = conexionLocal.obtenerFilas(res);
        int contadorInserciones = 0;
        try {
            res.beforeFirst();
            int numUltAct = 0;
            while (res.next()) {
                // Compruebo que el pedida no exista.
                if (!comprueboExistenciaSep("Sep", res.getInt(1), conexionWeb)) {



                    numUltAct = res.getInt(1);
                    //Hago la insercion de los clientes faltantes:
                    boolean exito = conexionWeb.insertarDatosR("insert into temp_separado values(" + bodega + "," + res.getInt(1) + ",'" + res.getString(2) + "','" + res.getDate(3).toString() + "'," + res.getDouble(4) + "," + res.getDouble(5) + "," + res.getDouble(6) + "," + res.getDouble(7) + "," + res.getDouble(8) + ",'" + res.getString(9) + "');");
                    if (exito) {
                        contadorInserciones++;
                        int porcentaje = (contadorInserciones * 100) / totalSeparaciones;
                        panelAct.barraProgreso.setValue(porcentaje);
                    }
                } else {
                    //No hace la Insercion si ya existe
                    contadorInserciones++;
                    int porcentaje = (contadorInserciones * 100) / totalSeparaciones;
                    panelAct.barraProgreso.setValue(porcentaje);
                }

            }

            if (contadorInserciones == totalSeparaciones) {
                //JOptionPane.showMessageDialog(panelAct,"Se subieron todos los "+totalClientes+" clientes exisotamente!!  ","Informacion",JOptionPane.INFORMATION_MESSAGE);
                conexionWeb.consultarBase("COMMIT;");

                //Actualizo el ultimo numero:
                if (numUltAct > 0) {
                    conexionWeb.actualizarBase("update temp_factsubidas set ultnumero=" + numUltAct + " where cod_bodega=" + bodega + " and tipoDoc like 'sep';");
                }

            } else {
                JOptionPane.showMessageDialog(panelAct, "Se produjo un problema al subir los Separados del total " + totalSeparaciones + " se subio unicamente: " + contadorInserciones + " a la web!!  ", "Informacion", JOptionPane.INFORMATION_MESSAGE);
                conexionWeb.consultarBase("ROLLBACK;");
            }




        } catch (SQLException ex) {
            Logger.getLogger(ProcSubeFacturas.class.getName()).log(Level.SEVERE, null, ex);
        }


    }

    private void suboDtlSeparados(Conexion conexionWeb) {
        //Saco el ultimo los Clientes de la Base Web
        ResultSet res = conexionWeb.consultarBase("SELECT ultnumero FROM temp_factsubidas where cod_bodega=" + bodega + " and tipoDoc like 'sep';");

        int ultSep = 0;
        try {
            res.beforeFirst();
            res.next();
            ultSep = res.getInt(1);
        } catch (SQLException ex) {
            Logger.getLogger(ProcSubeFacturas.class.getName()).log(Level.SEVERE, null, ex);
        }

        //Saco los clientes que no han sido creados: 
        res = conexionLocal.consultarBase("SELECT * FROM dtl_separado  where codigo>=" + ultSep + ";");
        this.panelAct.jLabel1.setText("Actualizo Detalle-Separados");
        conexionWeb.consultarBase("START TRANSACTION;");
        int totalSeparaciones = conexionLocal.obtenerFilas(res);
        int contadorInserciones = 0;
        try {
            res.beforeFirst();
            int numUltAct = 0;
            while (res.next()) {
                // Compruebo que el pedida no exista.
                if (!comprueboExistenciaSep("Sdt", res.getInt(1), conexionWeb)) {


                    //Hago la insercion de los clientes faltantes:
                    boolean exito = conexionWeb.insertarDatosR("insert into temp_dtl_separado values(" + bodega + "," + res.getInt(1) + "," + res.getInt(2) + ",'" + res.getString(3)/*Codigo*/ + "','" + res.getString(4) + "'," + res.getDouble(5) + "," + res.getInt(6)/*Cantidad*/ + ");");
                    numUltAct = res.getInt(1);

                    if (exito) {
                        contadorInserciones++;
                        int porcentaje = (contadorInserciones * 100) / totalSeparaciones;
                        panelAct.barraProgreso.setValue(porcentaje);
                    }
                } else {
                    //No hace la Insercion si ya existe
                    contadorInserciones++;
                    int porcentaje = (contadorInserciones * 100) / totalSeparaciones;
                    panelAct.barraProgreso.setValue(porcentaje);
                }

            }

            if (contadorInserciones == totalSeparaciones) {
                //JOptionPane.showMessageDialog(panelAct,"Se subieron todos los "+totalClientes+" clientes exisotamente!!  ","Informacion",JOptionPane.INFORMATION_MESSAGE);
                conexionWeb.consultarBase("COMMIT;");
                //Actualizo el ultimo numero:
                if (numUltAct > 0) {
                    conexionWeb.actualizarBase("update temp_factsubidas set ultnumero=" + numUltAct + " where cod_bodega=" + bodega + " and tipoDoc like 'sdt';");
                }

            } else {
                JOptionPane.showMessageDialog(panelAct, "Se produjo un problema al subir los DT Separados del total " + totalSeparaciones + " se subio unicamente: " + contadorInserciones + " a la web!!  ", "Informacion", JOptionPane.INFORMATION_MESSAGE);
                conexionWeb.consultarBase("ROLLBACK;");
            }




        } catch (SQLException ex) {
            Logger.getLogger(ProcSubeFacturas.class.getName()).log(Level.SEVERE, null, ex);
        }


    }

    private void suboPgSeparados(Conexion conexionWeb) {
        //Verifico de todos los cliente!!

        //Saco los clientes que no han sido creados: 
        ResultSet res = conexionLocal.consultarBase("SELECT * FROM pago_separado");
        int filas = conexionLocal.obtenerFilas(res);

        this.panelAct.jLabel1.setText("Actualizo Pagos-Separados");
        conexionWeb.consultarBase("START TRANSACTION;");
        int totalSeparaciones = conexionLocal.obtenerFilas(res);
        int contadorInserciones = 0;
        try {
            res.beforeFirst();

            Date fechaUltAct = null;
            while (res.next()) {
                // Compruebo que el pedida no exista.
                if (!comprueboExistenciaSep("Spg", res.getInt(1), conexionWeb)) {


                    //Hago la insercion de los clientes faltantes:
                   //System.out.println("insert into temp_pago_separado values(" + bodega + "," + res.getInt(1) + "," + res.getInt(2) + ",'" + res.getString(3) + "','" + res.getDate(4) + "'," + res.getDouble(5) + ",'" + res.getString(6) + "','" + res.getTime(7) + "");
                    fechaUltAct = res.getDate(4);
                    boolean exito = conexionWeb.insertarDatosR("insert into temp_pago_separado values(" + bodega + "," + res.getInt(1) + "," + res.getInt(2) + ",'" + res.getString(3) + "','" + res.getDate(4) + "'," + res.getDouble(5) + ",'" + res.getString(6) + "','" + res.getTime(7) + "');");

                    if (exito) {
                        contadorInserciones++;
                        int porcentaje = (contadorInserciones * 100) / totalSeparaciones;
                        panelAct.barraProgreso.setValue(porcentaje);
                    }
                } else {
                    //No hace la Insercion si ya existe
                    contadorInserciones++;
                    int porcentaje = (contadorInserciones * 100) / totalSeparaciones;
                    panelAct.barraProgreso.setValue(porcentaje);
                }

            }

            if (contadorInserciones == totalSeparaciones) {
                //JOptionPane.showMessageDialog(panelAct,"Se subieron todos los "+totalClientes+" clientes exisotamente!!  ","Informacion",JOptionPane.INFORMATION_MESSAGE);
                conexionWeb.consultarBase("COMMIT;");
                if (fechaUltAct != null) {
                    String fecha = new java.sql.Date(System.currentTimeMillis()).toString();
                    conexionWeb.actualizarBase("update temp_factsubidas set fecha_cliente='" + fecha + "' where cod_bodega=" + bodega + " and tipoDoc like 'spg';");
                }

            } else {
                JOptionPane.showMessageDialog(panelAct, "Se produjo un problema al subir los DT Separados del total " + totalSeparaciones + " se subio unicamente: " + contadorInserciones + " a la web!!  ", "Informacion", JOptionPane.INFORMATION_MESSAGE);
                conexionWeb.consultarBase("ROLLBACK;");
            }




        } catch (SQLException ex) {
            Logger.getLogger(ProcSubeFacturas.class.getName()).log(Level.SEVERE, null, ex);
        }


    }

    private void suboClientes(Conexion conexionWeb) {
        //Saco el ultimo los Clientes de la Base Web

        ResultSet res = conexionWeb.consultarBase("SELECT fecha_cliente FROM temp_factsubidas where cod_bodega=" + bodega + " and tipoDoc like 'cli';");
        Date ultCli = null;
        try {
            res.beforeFirst();
            res.next();
            ultCli = res.getDate(1);
        } catch (SQLException ex) {
            Logger.getLogger(ProcSubeFacturas.class.getName()).log(Level.SEVERE, null, ex);
        }

        DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
        if (ultCli == null) {

            try {
                ultCli = dateFormat.parse("01/01/2000");

            } catch (ParseException e) {
                e.printStackTrace();
            }
        }

        //Saco los clientes que no han sido creados: 
        res = conexionLocal.consultarBase("SELECT * FROM cliente c where fecha_act>='" + dateFormat.format(ultCli) + "';");
        conexionWeb.consultarBase("START TRANSACTION;");
        int totalClientes = conexionLocal.obtenerFilas(res);
        int contadorInserciones = 0;
        try {
            res.beforeFirst();

            while (res.next()) {
                // Compruebo que el pedida no exista.
                if (!comprueboExistenciaCli(res.getString(1), conexionWeb)) {




                    //Hago la insercion de los clientes faltantes:
                    boolean exito = conexionWeb.insertarDatosR("insert into temp_cliente values(" + bodega + ",'" + res.getString(1) + "','"
                            + res.getString(2) + "','" + res.getString(3) + "','" + res.getString(4) + "','" + res.getString(5)
                            + "','" + res.getString(6) + "','" + res.getString(7) + "','" + res.getString(8) + "','" + res.getString(9)
                            + "','" + res.getString(10) + "','" + res.getString(11) + "','" + res.getString(12) + "','" + res.getString(13)
                            + "','" + res.getString(14) + "','" + res.getString(15) + "','" + res.getDate(16).toString()
                            + "','" + res.getDate(17).toString() + "'," + res.getInt(18) + "," + res.getDouble(19) + "," + res.getInt(20) + ")");

                    if (exito) {
                        contadorInserciones++;
                        int porcentaje = (contadorInserciones * 100) / totalClientes;
                        panelAct.barraProgreso.setValue(porcentaje);
                    }
                } else {
                    //No hace la Insercion si ya existe
                    contadorInserciones++;
                    int porcentaje = (contadorInserciones * 100) / totalClientes;
                    panelAct.barraProgreso.setValue(porcentaje);
                }

            }

            if (contadorInserciones == totalClientes) {
                //JOptionPane.showMessageDialog(panelAct,"Se subieron todos los "+totalClientes+" clientes exisotamente!!  ","Informacion",JOptionPane.INFORMATION_MESSAGE);
                conexionWeb.consultarBase("COMMIT;");
            } else {
                JOptionPane.showMessageDialog(panelAct, "Se produjo un problema al subir los Clientes del total " + totalClientes + " se subio unicamente: " + contadorInserciones + " a la web!!  ", "Informacion", JOptionPane.INFORMATION_MESSAGE);
                conexionWeb.consultarBase("ROLLBACK;");
            }




        } catch (SQLException ex) {
            Logger.getLogger(ProcSubeFacturas.class.getName()).log(Level.SEVERE, null, ex);
        }


    }

    private void suboFacturas(int ultNumPed, Conexion cw) {
        //Subo Pedidos Pendientes:
        ResultSet pedidosfalt = this.conexionLocal.consultarBase("SELECT * FROM pedido where cod_pedido>" + ultNumPed + " ;");
        int numpedidos = conexionLocal.obtenerFilas(pedidosfalt);
        int exitopedido = 0;
        this.panelAct.jLabel1.setText("Actualizo Facturas");
        cw.consultarBase("START TRANSACTION;");
        int numUltAct = 0;
        try {
            pedidosfalt.beforeFirst();


            while (pedidosfalt.next()) {

                // Compruebo que el pedida no exista.
                if (!comprueboExistencia("Fac", pedidosfalt.getInt(1), cw)) {

                    String fechaanulacion;
                    try {
                        fechaanulacion = "'" + pedidosfalt.getDate(15).toString() + "'";
                    } catch (Exception e) {
                        fechaanulacion = "null";
                    }

                    //Hago las inserciones de los pedidos que faltan:
                    boolean inped = cw.insertarDatosR("insert into temp_pedido values(null," + pedidosfalt.getInt(1) + ",'" + pedidosfalt.getString(3) + "',"
                            + "'" + pedidosfalt.getDate(4).toString() + "','" + pedidosfalt.getString(5) + "','" + pedidosfalt.getString(6) + "','" + pedidosfalt.getString(7) + "','" + pedidosfalt.getString(8) + "','" + pedidosfalt.getString(9) + "'," + pedidosfalt.getDouble(10) + ","
                            + "" + pedidosfalt.getDouble(11) + "," + pedidosfalt.getDouble(12) + "," + pedidosfalt.getDouble(13) + ",'" + pedidosfalt.getString(14) + "'," + fechaanulacion + ",'" + pedidosfalt.getString(16) + "','" + pedidosfalt.getString(17) + "','" + bodega + "',"
                            + "'" + pedidosfalt.getInt(19) + "'," + pedidosfalt.getDouble(20) + "," + pedidosfalt.getDouble(21) + ",'" + pedidosfalt.getString(22) + "','" + pedidosfalt.getString(2) + "','" + pedidosfalt.getString(23) + "')");
                    numUltAct = pedidosfalt.getInt(1);
                    if (inped) {
                        exitopedido++;
                        int porcentaje = (exitopedido * 100) / numpedidos;
                        panelAct.barraProgreso.setValue(porcentaje);
                    }

                } else {
                    //No hace nada si el pedido ya existe
                    exitopedido++;
                    int porcentaje = (exitopedido * 100) / numpedidos;
                    panelAct.barraProgreso.setValue(porcentaje);
                }

            }

        } catch (SQLException ex) {
            Logger.getLogger(ProcSubeFacturas.class.getName()).log(Level.SEVERE, null, ex);
        }

        if (numpedidos == exitopedido) {
            //JOptionPane.showMessageDialog(panelAct,"Se subieron todas las ventas a la web exisotamente!!  ","Informacion",JOptionPane.INFORMATION_MESSAGE);
            cw.consultarBase("COMMIT;");
            //Actualizo el ultimo numero:
            if (numUltAct > 0) {
                cw.actualizarBase("update temp_factsubidas set ultnumero=" + numUltAct + " where cod_bodega=" + bodega + " and tipoDoc like 'fac';");
            }

        } else {
            JOptionPane.showMessageDialog(panelAct, "Se produjo un problema al subir las facturas a la web!!  ", "Informacion", JOptionPane.INFORMATION_MESSAGE);
            cw.consultarBase("ROLLBACK;");
        }
    }

    private void suboKFacturas(int ultNumKFact, Conexion cw, String TipoDoc) {
        //Subo KFacturas Pendientes:
        ResultSet kfacturasfalt = this.conexionLocal.consultarBase("SELECT * FROM kfactura where cod_kfactura>" + ultNumKFact + " and tipo_comprobante = '" + TipoDoc + "';");
        int numpedidos = conexionLocal.obtenerFilas(kfacturasfalt);
        int exitopedido = 0;
        this.panelAct.jLabel1.setText("Actualizo Fac-Compras");
        cw.consultarBase("START TRANSACTION;");
        int numUltAct = 0;
        try {
            kfacturasfalt.beforeFirst();

            while (kfacturasfalt.next()) {

                // Compruebo que el pedida no exista.
                if (!comprueboExistencia("KFac", kfacturasfalt.getInt(1), cw)) {


                    String fechaanulacion;
                    try {
                        fechaanulacion = "'" + kfacturasfalt.getDate(15).toString() + "'";
                    } catch (Exception e) {
                        fechaanulacion = "null";
                    }



                    //Hago las inserciones de los pedidos que faltan:
                    boolean inped = cw.insertarDatosR("insert into temp_kfactura values(null," + kfacturasfalt.getInt(1) + ",'" + kfacturasfalt.getString(2) + "','" + kfacturasfalt.getString(3) + "',"
                            + "'" + kfacturasfalt.getDate(4).toString() + "','" + kfacturasfalt.getString(5) + "','" + kfacturasfalt.getString(6) + "','" + kfacturasfalt.getString(7) + "','" + kfacturasfalt.getString(8) + "','" + kfacturasfalt.getString(9) + "'," + kfacturasfalt.getDouble(10) + ","
                            + "" + kfacturasfalt.getDouble(11) + "," + kfacturasfalt.getDouble(12) + "," + kfacturasfalt.getDouble(13) + ",'" + kfacturasfalt.getString(14) + "'," + fechaanulacion + ",'" + kfacturasfalt.getString(16) + "','" + kfacturasfalt.getString(17) + "','" + kfacturasfalt.getInt(18) + "',"
                            + "'" + bodega + "'," + kfacturasfalt.getString(20) + ",'" + kfacturasfalt.getDouble(21) + "')");
                    numUltAct = kfacturasfalt.getInt(1);
                    if (inped) {
                        exitopedido++;
                        int porcentaje = (exitopedido * 100) / numpedidos;
                        panelAct.barraProgreso.setValue(porcentaje);
                    }


                } else {
                    //No hace nada si el pedido ya existe
                    exitopedido++;
                    int porcentaje = (exitopedido * 100) / numpedidos;
                    panelAct.barraProgreso.setValue(porcentaje);
                    //Actualizo el ult numero en el servidor
                    numUltAct = kfacturasfalt.getInt(1);
                    if (numUltAct > 0) {
                        if (TipoDoc.equals("S")) {
                            cw.actualizarBase("update temp_factsubidas set ultnumero=" + numUltAct + " where cod_bodega=" + bodega + " and tipoDoc like 'dev';");
                        } else {
                            cw.actualizarBase("update temp_factsubidas set ultnumero=" + numUltAct + " where cod_bodega=" + bodega + " and tipoDoc like 'kfa';");
                        }
                    }

                }


            }

        } catch (SQLException ex) {
            Logger.getLogger(ProcSubeFacturas.class.getName()).log(Level.SEVERE, null, ex);
        }

        if (numpedidos == exitopedido) {
            //JOptionPane.showMessageDialog(panelAct,"Se subieron todas las compras "+TipoDoc+"  a la web exisotamente!!  ","Informacion",JOptionPane.INFORMATION_MESSAGE);
            cw.consultarBase("COMMIT;");

            if (numUltAct > 0) {
                if (TipoDoc.equals("S")) {
                    cw.actualizarBase("update temp_factsubidas set ultnumero=" + numUltAct + " where cod_bodega=" + bodega + " and tipoDoc like 'dev';");
                } else {
                    cw.actualizarBase("update temp_factsubidas set ultnumero=" + numUltAct + " where cod_bodega=" + bodega + " and tipoDoc like 'kfa';");
                }
            }
        } else {
            JOptionPane.showMessageDialog(panelAct, "Se produjo un problema al subir las facturas " + TipoDoc + " a la web!!  ", "Informacion", JOptionPane.INFORMATION_MESSAGE);
            cw.consultarBase("ROLLBACK;");
        }

    }

    private void subodtlFacturas(int ultNumPed, Conexion cw) {
        //Subo Pedidos Pendientes:
        ResultSet dtlpedidosfalt = this.conexionLocal.consultarBase("SELECT * FROM dtl_pedido where cod_pedido>" + ultNumPed + ";");
        int numpedidos = conexionLocal.obtenerFilas(dtlpedidosfalt);
        int exitopedido = 0;
        this.panelAct.jLabel1.setText("Actualizo Det-Facturas");
        cw.consultarBase("START TRANSACTION;");
        try {
            dtlpedidosfalt.beforeFirst();


            while (dtlpedidosfalt.next()) {

                // Compruebo que el dtl_pedida no exista.
                if (!comprueboExistenciaDtl("Fac", dtlpedidosfalt.getInt(1), dtlpedidosfalt.getString(2), cw)) {




                    //Hago las inserciones de los dtl_pedidos que faltan:
                    boolean inped = cw.insertarDatosR("insert into temp_dtl_pedido values(null," + bodega + "," + dtlpedidosfalt.getInt(1) + ",'" + dtlpedidosfalt.getString(2) + "',"
                            + "'" + dtlpedidosfalt.getInt(3) + "','" + dtlpedidosfalt.getDouble(4) + "','" + dtlpedidosfalt.getString(5) + "'"
                            + ",'" + dtlpedidosfalt.getString(6) + "','" + dtlpedidosfalt.getDouble(7) + "')");
                    if (inped) {
                        exitopedido++;
                        int porcentaje = (exitopedido * 100) / numpedidos;
                        panelAct.barraProgreso.setValue(porcentaje);
                    }

                } else {
                    //No hace nada si el pedido ya existe
                    exitopedido++;
                    int porcentaje = (exitopedido * 100) / numpedidos;
                    panelAct.barraProgreso.setValue(porcentaje);
                }

            }

        } catch (SQLException ex) {
            Logger.getLogger(ProcSubeFacturas.class.getName()).log(Level.SEVERE, null, ex);
        }

        if (numpedidos == exitopedido) {
            //JOptionPane.showMessageDialog(panelAct,"Se subieron todas los detalles de ventas a la web exisotamente!!  ","Informacion",JOptionPane.INFORMATION_MESSAGE);
            cw.consultarBase("COMMIT;");
        } else {
            JOptionPane.showMessageDialog(panelAct, "Se produjo un problema al subir los detalles de las facturas Compras Ventas a la web!!  ", "Informacion", JOptionPane.INFORMATION_MESSAGE);
            cw.consultarBase("ROLLBACK;");
        }
    }

    private void subodtlKFacturas(int ultNumKFact, Conexion cw, String TipoDoc) {
        //Subo KFacturas Pendientes:
        String consulta = "SELECT * FROM dtl_kfactura where cod_kfactura>" + ultNumKFact + " and tipoDoc like '" + TipoDoc + "';";
       //System.out.println(consulta);
        ResultSet kfacturasfalt = this.conexionLocal.consultarBase(consulta);
        int numpedidos = conexionLocal.obtenerFilas(kfacturasfalt);
        int exitopedido = 0;
        this.panelAct.jLabel1.setText("Actualizo Det-Fact Compras");
        cw.consultarBase("START TRANSACTION;");
        try {
            kfacturasfalt.beforeFirst();


            while (kfacturasfalt.next()) {

                // Compruebo que el pedida no exista.
                if (!comprueboExistenciaDtl("KFac", kfacturasfalt.getInt(1), kfacturasfalt.getString(2), cw)) {

                    //Hago las inserciones de los pedidos que faltan:
                    consulta = "insert into temp_dtl_kfactura values(null," + bodega + "," + kfacturasfalt.getInt(1) + ",'" + kfacturasfalt.getString(2) + "','" + kfacturasfalt.getInt(3) + "',"
                            + "'" + kfacturasfalt.getDouble(4) + "','" + kfacturasfalt.getDouble(5) + "','" + kfacturasfalt.getString(6) + "','" + kfacturasfalt.getDouble(7) + "','" + kfacturasfalt.getString(8) + "')";
                   //System.out.println(consulta);
                    boolean inped = cw.insertarDatosR(consulta);

                    if (inped) {
                        exitopedido++;
                        int porcentaje = (exitopedido * 100) / numpedidos;
                        panelAct.barraProgreso.setValue(porcentaje);
                    }


                } else {
                    //No hace nada si el pedido ya existe
                    exitopedido++;
                    int porcentaje = (exitopedido * 100) / numpedidos;
                    panelAct.barraProgreso.setValue(porcentaje);
                }


            }

        } catch (SQLException ex) {
            Logger.getLogger(ProcSubeFacturas.class.getName()).log(Level.SEVERE, null, ex);
        }

        if (numpedidos == exitopedido) {
            //JOptionPane.showMessageDialog(panelAct,"Se subieron todas las factiras de "+TipoDoc+" a la web exisotamente!!  ","Informacion",JOptionPane.INFORMATION_MESSAGE);
            cw.consultarBase("COMMIT;");
        } else {
            JOptionPane.showMessageDialog(panelAct, "Se produjo un problema al subir  las facturas " + TipoDoc + " a la web!!  ", "Informacion", JOptionPane.INFORMATION_MESSAGE);
            cw.consultarBase("ROLLBACK;");
        }

    }

    
    public boolean comprueboExistencia(String doc, int numero, Conexion cw) {
        //Compruebo existencia de facturas y kerdex
        boolean r = false;
        ResultSet respuesta;
        if (doc.equals("Fac")) {
            respuesta = cw.consultarBase("Select * from temp_pedido where cod_pedido=" + numero + " and cod_bodega=" + bodega + ";");

        } else {
            //Karde Factura
            respuesta = cw.consultarBase("Select * from temp_kfactura where cod_kfactura=" + numero + " and cod_bodega=" + bodega + ";");
        }
        int filas = conexionLocal.obtenerFilas(respuesta);

        if (filas > 0) {
            r = true;
        }
        return r;

    }

    public boolean comprueboExistenciaDtl(String doc, int numero, String cod_producto, Conexion cw) {
        //Compruebo existencia de facturas y kerdex
        boolean r = false;
        ResultSet respuesta;
        if (doc.equals("Fac")) {
            respuesta = cw.consultarBase("Select * from temp_dtl_pedido where cod_pedido=" + numero + " and cod_bodega=" + bodega + " and cod_producto like '" + cod_producto + "';");

        } else {
            //Karde Factura
            respuesta = cw.consultarBase("Select * from temp_dtl_kfactura where cod_kfactura=" + numero + " and cod_bodega=" + bodega + " and cod_producto like '" + cod_producto + "';");
        }
        int filas = conexionLocal.obtenerFilas(respuesta);

        if (filas > 0) {
            r = true;
        }
        return r;

    }

    public boolean comprueboExistenciaCli(String cedula, Conexion cw) {
        //Compruebo existencia de facturas y kerdex
        boolean r = false;
        ResultSet respuesta;

        respuesta = cw.consultarBase("Select * from temp_cliente where cod_cliente like '" + cedula + "' and cod_bodega=" + bodega + ";");

        int filas = conexionLocal.obtenerFilas(respuesta);

        if (filas > 0) {
            r = true;
        }
        return r;

    }

    //Separado:
    public boolean comprueboExistenciaSep(String doc, int numero, Conexion cw) {
        //Compruebo existencia de facturas y kerdex
        boolean r = false;
        ResultSet respuesta;
        if (doc.equals("Sep")) {
            //El Separado
            respuesta = cw.consultarBase("Select * from temp_separado where cod_separado=" + numero + " and cod_bodega=" + bodega + ";");

        } else if (doc.equals("Sdt")) {
            //El detalle separado
            respuesta = cw.consultarBase("Select * from temp_dtl_separado where cod_dtl=" + numero + " and cod_bodega=" + bodega + ";");
        } else {
            //Pago separado
            respuesta = cw.consultarBase("Select * from temp_pago_separado where codigo_pago=" + numero + " and cod_bodega=" + bodega + ";");
        }
        int filas = conexionLocal.obtenerFilas(respuesta);

        if (filas > 0) {
            r = true;
        }
        return r;

    }
}
